using System;
using EnvDTE;

namespace NUnitGenAddIn.VS2005.Test
{
    /// <summary>
    /// Mock Code <c>Namespace</c> 2005
    /// </summary>
	internal class MockCodeNamespace2005 : MockCodeElement2005, CodeNamespace
	{
        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeNamespace2005"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
		public MockCodeNamespace2005(string name) : base(name)
		{}

        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeNamespace2005"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="children">The children.</param>
		public MockCodeNamespace2005(string name, CodeElements children) : base(name, children)
		{}

        /// <summary>
        /// Gets the kind.
        /// </summary>
        /// <value>The kind.</value>
		public override vsCMElement Kind
		{
			get { return vsCMElement.vsCMElementNamespace; }
		}

		#region CodeNamespace Members

        /// <summary>
        /// Adds the class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeClass"/> object</returns>
		public CodeClass AddClass(string name, object position, object bases, object implementedInterfaces, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the delegate.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeDelegate"/> object</returns>
		public CodeDelegate AddDelegate(string name, object type, object position, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the enum.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeEnum"/> object</returns>
		public CodeEnum AddEnum(string name, object position, object bases, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the interface.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeInterface"/> object</returns>
		public CodeInterface AddInterface(string name, object position, object bases, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the <c>Namespace</c>.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <returns><see cref="CodeNamespace"/> object</returns>
		public CodeNamespace AddNamespace(string name, object position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the struct.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeStruct"/> object</returns>
		public CodeStruct AddStruct(string name, object position, object bases, object implementedInterfaces,
		                            vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets or sets the comment.
        /// </summary>
        /// <value>The comment.</value>
		public string Comment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the doc comment.
        /// </summary>
        /// <value>The doc comment.</value>
		public string DocComment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the members.
        /// </summary>
        /// <value>The members.</value>
		public CodeElements Members
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the parent.
        /// </summary>
        /// <value>The parent.</value>
		public new object Parent
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Removes the specified element.
        /// </summary>
        /// <param name="element">The element.</param>
		public void Remove(object element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

		#endregion
	}
}